package com.hdd.fmh.common.config;

import com.google.common.collect.Maps;
import com.hdd.fmh.common.utils.PropertiesLoader;
import com.hdd.fmh.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Value;

import java.util.Map;


/**
 * 全局配置类 --- 对应 配置文件config.properties
 */
public class Global {
	
	/**
	 * 当前对象实例
	 */
	private static Global global = null;
	
	
	/**
	 * 静态工厂方法 获取当前对象实例 多线程安全单例模式(使用双重同步锁)
	 */

	public static synchronized Global getInstance() {

		if (global == null) {
			synchronized (Global.class) {
				if (global == null) {
                    global = new Global();
                }
			}
		}
		return global;
	}

	/**
	 * 保存全局属性值 config.properties 中值
	 */
	private static Map<String, Object> configMap = Maps.newHashMap();

	/**
	 * 属性文件加载对象
	 */
	private static PropertiesLoader loader = new PropertiesLoader("config.properties");

	/**
	 * 获取配置
	 */
	public static String getConfigString(String key) throws Exception {
		Object value = configMap.get(key);
		if(!StringUtils.isNullOrEmpty(value)){
			return String.valueOf(value);
		}
		value = loader.getProperty(key);
		if(!StringUtils.isNullOrEmpty(value)){
			configMap.put(key, value);
			return String.valueOf(value);
		}
		throw new Exception("key====不存在！");
	}
	/**
	 * 获取配置
	 */
	public static boolean getConfigBoolean(String key) throws Exception {
		Object value = configMap.get(key);
		if(!StringUtils.isNullOrEmpty(value)){
			return (Boolean) value;
		}
		value = loader.getBoolean(key);
		if(!StringUtils.isNullOrEmpty(value)){
			configMap.put(key, value);
			return (Boolean) value;
		}
		throw new Exception("key====不存在！");
	}

	/**
	 * 获取配置
	 */
	public static Integer getConfigInteger(String key) {
		try {
			Object value = configMap.get(key);
			if(!StringUtils.isNullOrEmpty(value)){
				return (Integer) value;
			}
			value = loader.getInteger(key);
			if(!StringUtils.isNullOrEmpty(value)){
				configMap.put(key, value);
				return (Integer) value;
			}
		}catch (Exception e){
			e.printStackTrace();
		}
		return null;
	}

}
